// src/api/auth.ts
import axios, { AxiosInstance, AxiosResponse } from 'axios';

// 定义 API 基础 URL
const API_URL = 'http://localhost:8000';

// 创建一个 axios 实例
const apiClient: AxiosInstance = axios.create({
  baseURL: API_URL,
  headers: {
    'Content-Type': 'application/json',
    // 如果你的 Django 后端需要 CSRF token，你需要在这里添加它
    // 'X-CSRFToken': getCookie('csrftoken'),  // 你需要实现这个函数来获取 CSRF token，注意这里需要在某处定义 getCookie 函数
  },
  withCredentials: true,  // 这取决于你的认证策略，可能不需要
});

// 定义登录函数的返回类型
interface LoginResponse {
  status: string;
  message?: string;
  token?: string;  // 假设后端可能返回一个 token
}

// 登录函数
export const login = async (username: string, password: string): Promise<void> => {
  try {
    alert()
    const response: AxiosResponse<LoginResponse> = await apiClient.post('/login/', { username, password });
    if (response.data.status === 'success') {
      // 在这里处理登录成功的逻辑，比如存储 token 或重定向
      console.log('Login successful!');
      // 例如，如果你的后端返回了一个 token，你可以这样存储它：
      // localStorage.setItem('authToken', response.data.token);  // 假设后端返回了一个 token
    } else {
      // 处理登录失败的逻辑
      console.error('Login failed:', response.data.message || 'Unknown error');
    }
  } catch (error) {
    // 处理请求错误的逻辑，注意这里 error 的类型可能是 AxiosError，但需要安装 axios 的类型定义文件
    console.error('An error occurred:', error);
  }
};

// 注意：如果你使用了 TypeScript 并且想要更精确地处理错误，你可能需要安装 axios 的类型定义文件，并导入 AxiosError 类型。
// 例如，你可以运行 `npm install --save-dev @types/axios` 来安装类型定义文件，并在代码中这样使用：
// import { AxiosError } from 'axios';
// 然后在 catch 块中：
// } catch (error: AxiosError) {
//   // 处理请求错误的逻辑
//   console.error('An error occurred:', error.message || 'Unknown error');
//   // 你可以访问 error.response, error.request, error.config 等属性来获取更多信息
// }